package com.study4j.crontab.web;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.study4j.common.enums.EnumSysCode;
import com.study4j.common.model.ResultModel;
import com.study4j.common.utils.RespUtil;
import com.study4j.crontab.model.CrontabVO;
import com.study4j.crontab.service.IQuartzJobManagerService;

/**
 * @author jiangbin
 * @version 1.0.0
 * @description 定时任务管理控制层
 * @date 2019/7/24 16:41
 */
@RestController
@RequestMapping(value = "/crontab")
public class CrontabController {

	@Autowired
	private IQuartzJobManagerService quartzJobManagerService;

	/**
	 * @description 新增定时任务
	 * @param crontabVO
	 * @return
	 * @author Jiangbin
	 * @date 2019年7月28日 下午9:52:32
	 */
	@PostMapping(value = "/addTask")
	public ResultModel addjob(@RequestBody CrontabVO crontabVO) {
		quartzJobManagerService.addJob(crontabVO);
		return RespUtil.success();
	}

	/**
	 * @description 暂停任务
	 * @param crontabVO
	 * @return
	 * @throws Exception
	 * @author Jiangbin
	 * @date 2019年7月28日 下午9:52:51
	 */
	@PostMapping(value = "/pauseTask")
	public ResultModel pausejob(CrontabVO crontabVO) {
		quartzJobManagerService.pauseJob(crontabVO.getTaskClassName(), crontabVO.getTaskGroupName());
		return RespUtil.success();
	}

	/**
	 * @description 恢复定时任务
	 * @param crontabVO
	 * @return
	 * @throws Exception
	 * @author Jiangbin
	 * @date 2019年7月28日 下午9:54:03
	 */
	@PostMapping(value = "/resumeTask")
	public ResultModel resumejob(CrontabVO crontabVO) {
		quartzJobManagerService.resumeJob(crontabVO.getTaskClassName(), crontabVO.getTaskGroupName());
		return RespUtil.success();
	}

	/**
	 * @description 更新任务
	 * @param crontabVO
	 * @return
	 * @author Jiangbin
	 * @date 2019年7月28日 下午10:00:45
	 */
	@PostMapping(value = "/rescheduleTask")
	public ResultModel rescheduleJob(CrontabVO crontabVO) {
		quartzJobManagerService.updateJob(crontabVO);
		return RespUtil.success();
	}

	/**
	 * @description 删除定时任务
	 * @param crontabVO
	 * @return
	 * @author Jiangbin
	 * @date 2019年7月28日 下午9:55:53
	 */
	@PostMapping(value = "/deleteTask")
	public ResultModel deletejob(CrontabVO crontabVO) {
		quartzJobManagerService.deleteJob(crontabVO.getTaskClassName(), crontabVO.getTaskGroupName());
		return RespUtil.success();
	}

	/**
	 * @description 分页获取任务列表
	 * @param pageNum
	 * @param pageSize
	 * @return
	 * @author Jiangbin
	 * @date 2019年7月28日 下午9:58:49
	 */
	@GetMapping(value = "/list")
	public ResultModel list() {
		List<Map<String, Object>> allJob = quartzJobManagerService.getAllJob();
		return RespUtil.result(EnumSysCode.SUCCESS, allJob);
	}

}
